#include <iostream>
using namespace std;
// 函数名可以相同，提高复用性

// 满足条件
// 同一个作用域下
// 函数名称相同
// 函数参数类型不同或者个数不同或者顺序不同
// 注意：函数的返回值不可以作为函数重载的条件
void func()
{
    cout << "func的调用!" << endl;
}

void func(int a)
{
    cout << "func(int a)的调用!" << endl;
}

void func(double a)
{
    cout << "func(double a)的调用!" << endl;
}

void func(double a, int b)
{
    cout << "func(double a, int b)的调用!" << endl;
}

void func(int a, double b)
{
    cout << "func(int a, double b)的调用!" << endl;
}

// 注意：函数的返回值不可以作为函数重载的条件
// int func(int a, double b)
// {
//     cout << "func(int a, double b)的调用!" << endl;
// }

// 注意事项
// 1.引用作为重载条件
// void func(int &a)        //int &a = 10;不合法
// {
//     cout << "func(int &a)的调用!" << endl;
// }

// void func(const int &a)     //const int &a = 10;
// {
//     cout << "func(const int &a)的调用!" << endl;
// }

// 2.函数重载碰到函数默认参数
void func2(int a, int b)
{
    cout << "func2(int a)的调用!" << endl;
}

// void func2(int a, int b = 10)
// {
//     cout << "func2(int a)的调用!" << endl;
// }

void func2(int a)
{
    cout << "func2(int a)的调用!" << endl;
}

int main()
{
    func(10);
    func();
    func(3.13);
    func(3.13, 3);
    func(3, 3.13);
    func2(2); // 当函数重载碰到默认参数，出现二义性，报错，尽量避免这种情况
    system("pause");
    return 0;
}
